package com.sakura.system.service.impl.gldimpl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sakura.system.dao.glddao.UserDao;
import com.sakura.system.entity.Params;
import com.sakura.system.entity.gld.User;
import com.sakura.system.exception.BusinessErrorException;
import com.sakura.system.utils.JwtTokenUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Slf4j
@Service
public class UserServiceImpl {
//    @Resource
    @Autowired
    private UserDao dao;

//    @Autowired
//    private SnowflakeIdWorker snowflakeIdWorker;

    public List<User> getUser() {
        return dao.getUser();
    }

    public PageInfo<User> fibdBySearch(Params params) {
//        开启分页查询
//        log.info(params.getPageNume().toString());
//        log.info(params.getPageSize().toString());
//        PageHelper.startPage(params.getPageNume(),params.getPageSize());
        PageHelper.startPage(params.getPageNume(),params.getPageSize());
//        接下来的程序，会自动按照当前开启的分页查询
        List<User> users = dao.fibdBySearch(params);
        return PageInfo.of(users);
    }

    public void add(User user) {
//        判断用户名是否为空

//        if (user.getUsername()!=null && isEmpty(user.getUsername())){
        if (user.getUsername()==null || "".equals(user.getUsername())){
            throw new BusinessErrorException("用户名不能空！");
        }
        // 进行重复判断,管理员不允许重复新增,数据库查询一下
        User user1 = dao.findByName(user.getUsername());
        if (user1 != null){
            // 说明已经存在该用户
            throw new BusinessErrorException("该用户名已经存在，请更换用户名！");
//            throw new BusinessErrorException(500,"该用户名已经存在，请勿重复添加！");
        }
        //  初始化密码
        if (user.getPassword() == null){
            user.setPassword("135246");
        }
        log.info(user.toString());
//        dao.insertSelective(user);
        dao.insert(user);
    }

    public void update(User user) {
        dao.updateById(user);
    }

    public void delete(String id) {
//        dao.deleteById(id);
        dao.deleteId(id);
    }

    public User login(User user) {
        // 1,进行一些非空校验
        if (user.getUsername()==null || "".equals(user.getUsername())){
            throw new BusinessErrorException("用户名不能空！");
        }
        if (user.getPassword()==null || "".equals(user.getPassword())){
            throw new BusinessErrorException("密码不能空！");
        }
        // 2,从数据库根据用户名和密码查询对应用户名和密码,如果有,证明有这个管理员,而且输入的用户名和密码正确
        User user1 = dao.findByNameAndPassword(user.getUsername(),user.getPassword());
        // 3,如果查出来没有,说明登陆有误
        if (user1 == null){
            throw new BusinessErrorException("用户名或者密码错误！");
        }
        // 生成该登陆用户的token,跟user一起返回到前端
        String token = JwtTokenUtils.genToken(user.getId(), user.getPassword());
        user1.setToken(token);
        return user1;
    }

    public User fibdByById(Integer id) {
        return dao.selectById(id);
    }

    public List<User> findAll() {
        return dao.selectAll();
    }
}
